package com.shujia.scala

import scala.io.Source

object Demo25ScalaWordCount {
  // scala版wordCount
  def main(args: Array[String]): Unit = {

    // 1、读文件 并将每一行数据构造成List
    val lines: List[String] = Source.fromFile("data/words.txt").getLines().toList

    // 2、遍历List 对每行数据进行切分 并展开
    val words: List[String] = lines.flatMap(_.split(","))
    //    words.foreach(println)

    // 3、按照每个word分组 每一行数据都是一维的 所以按照自身分组就行
    val groupMap: Map[String, List[String]] = words.groupBy(word => word)
    //    groupMap.foreach(println)
    // 4、统计每个单词出现的次数
    val wordCnt: Map[String, Int] = groupMap.map(tuple2 => {
      val word: String = tuple2._1
      val wordList: List[String] = tuple2._2
      val wordCnt: Int = wordList.size
      (word, wordCnt)
    })

    // 5、打印结果
    wordCnt.foreach(println)

    // 简化版 链式调用
    Source.fromFile("data/words.txt")
      .getLines()
      .toList // 转List
      .flatMap(_.split(",")) // 切分每条数据并展开
      .groupBy(word => word) // 按每个word分组
      .map(kv => (kv._1, kv._2.size)) // 统计单词次数
      .foreach(println) // 打印

  }

}
